package utils

import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"gopkg.in/natefinch/lumberjack.v2"
	"os"
	"time"
)

const logDir = "logs"

func NewZapLogger() (*zap.Logger, error) {
	// 日志文件路径
	logFilePath := logDir + "/" + time.Now().Format("2006-01-02") + ".log"

	// 设置编码器配置（可自定义时间格式等）
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder // 时间格式

	// 创建 JSON 编码器
	encoder := zapcore.NewJSONEncoder(encoderConfig)

	writer := &lumberjack.Logger{
		Filename:   logFilePath,
		MaxSize:    10, // MB
		MaxBackups: 3,
		MaxAge:     7, // days
		Compress:   true,
	}

	// 创建 Core，将日志写入文件
	core := zapcore.NewTee(
		zapcore.NewCore(encoder, zapcore.AddSync(writer), zapcore.DebugLevel),
		zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.DebugLevel), // 同时输出到控制台

	)

	// 构建 Logger
	logger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.ErrorLevel))

	return logger, nil
}
